package com.bestcem.xm.user.service.impl;

import com.alibaba.fastjson.JSON;
import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.componet.redis.service.RedisService;
import com.bestcem.xm.user.constant.UserCacheKeyConstant;
import com.bestcem.xm.user.dao.UserScenarioDao;
import com.bestcem.xm.user.entity.mysql.UserScenario;
import com.bestcem.xm.user.service.UserScenarioService;
import com.bestcem.xm.user.service.dto.user.UserScenarioDTO;
import com.bestcem.xm.user.util.convert.UserScenarioConvert;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
 * 使用场景业务层实现类
 *
 * @author YiFang <yifang.zhang@idiaoyan.com>
 * @version v1.0
 * @date 2022/7/14 13:32
 */
@Service
public class UserScenarioServiceImpl implements UserScenarioService {

    @Resource
    UserScenarioDao userScenarioDao;

    @Resource
    private RedisService redisService;

    @Resource
    UserScenarioConvert userScenarioConvert;

    @Override
    public ServiceResult<List<UserScenario>> listScenarios() {
        String key = UserCacheKeyConstant.USER_SCENARIO_LIST_KEY;
        Object scenario = redisService.get(key);
        if (Objects.nonNull(scenario)) {
            List<UserScenario> userScenarios = JSON.parseArray(scenario.toString(), UserScenario.class);
            return ServiceResult.success(userScenarios);
        }
        List<UserScenario> userScenarios = userScenarioDao.listScenarios();
        if (CollectionUtils.isEmpty(userScenarios)) {
            return ServiceResult.fail("使用场景列表为空");
        }
        redisService.set(key, JSON.toJSONString(userScenarios), 3600, TimeUnit.SECONDS);
        return ServiceResult.success(userScenarioDao.listScenarios());
    }

    /**
     * 根据id查询使用场景
     *
     * @param scenarioId
     * @return
     */
    @Override
    public ServiceResult<UserScenarioDTO> getUserScenarioById(String scenarioId) {
        UserScenario userScenario = userScenarioDao.findById(scenarioId);
        if (Objects.isNull(userScenario)) {
            return ServiceResult.fail("使用场景为空");
        }
        return ServiceResult.success(userScenarioConvert.entityToDTO(userScenario));
    }
}
